﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// 文本简单读取和处理
namespace mytool
{

    class Parameter
    {
        public string original { get; set; }// 要替换的内容
        public string target { get; set; }//替换后的内容
        public string line { get; set; }//替换为换行符的内容
        public bool surplusLine { get; set; }//是否去除多余换行符
        public bool line_beginning_space { get; set; }//是否行首空格
        public bool encryption { get; set; }// 加密
        public bool decrypt { get; set; }// 解密

        public Parameter(string original, string target, string line, bool surplusLine, bool line_beginning_space, bool encryption, bool decrypt)
        {
            this.original = original;
            this.target = target;
            this.line = line;
            this.surplusLine = surplusLine;
            this.line_beginning_space = line_beginning_space;
            this.encryption = encryption;
            this.decrypt = decrypt;
        }
    }

    class TextHandle
    {
        private Parameter parameter;


        // 读取当前文件夹txt文件
        public void readCurrentFolder(Parameter parameter)
        {
            this.parameter = parameter;
            
            //Random random = new Random();// 随机数
            //int num = random.Next(0, 10);
            long ticks = DateTime.Now.Ticks;
            string ticks_str = ticks.ToString();
            ticks_str = ticks_str.Substring(ticks_str.Length - 4);

            string path = Directory.GetCurrentDirectory();//获得当前运行程序的路径
            //Directory.GetParent(rootPath).FullName;//上级目录
            //Directory.GetParent(parentPath).FullName;//上上级目录
            // 当前文件夹对象
            DirectoryInfo root = new DirectoryInfo(path);
            // 获取文件下所有的文件对象
            FileInfo[] files = root.GetFiles();

            // 处理文件
            foreach (FileInfo file in files)
            {
                string name = file.Name;// 文件名
                string fullName = file.FullName;// 绝对路径
                string extension = file.Extension;// 文件扩展名
                // 不是文本文件，不做处理。
                if (!".txt".Equals(extension) && !".TXT".Equals(extension)) { continue; }

                // 如果是解密，则只解密，不向下进行操作
                // 是否解密
                if (parameter.decrypt)
                {
                    string out_fullName = Path.Combine(path, "decrypt" + name);
                    DESFile.DecryptFile(fullName, out_fullName);
                    continue;
                }
                // 是否加密
                if (parameter.encryption)
                {
                    string out_fullName = Path.Combine(path, "encryption" + name);
                    DESFile.EncryptFile(fullName, out_fullName);
                    continue;
                }

                string text = File.ReadAllText(fullName);
                // 文件内容是否为空，为空则进入下一个循环。
                if(string.IsNullOrEmpty(text)){ continue; }
                // 是否需要换行。将指定内容替换为换行。
                if(!string.IsNullOrEmpty(parameter.line))
                {
                    text = text.Replace(parameter.line, Environment.NewLine);
                }
                // 将指定的内容替换为指定内容
                if (!string.IsNullOrEmpty(parameter.original))
                {
                    text = text.Replace(parameter.original, parameter.target);
                }
                // 去除多余换行符
                if(parameter.surplusLine)
                {
                    text = text.Replace(Environment.NewLine + Environment.NewLine, Environment.NewLine);
                }
                // 是否行首空格
                if (parameter.line_beginning_space)
                {
                    text = text.Replace(Environment.NewLine, "    "+Environment.NewLine);
                }

                string new_name = ticks_str + name;
                string new_fullName = Path.Combine(path, new_name);
                File.WriteAllText(new_fullName, text, Encoding.UTF8);
                //FileStream fs = new FileStream(new_fullName, FileMode.Create, FileAccess.Write);
                //byte[] buffer = Encoding.UTF8.GetBytes(text);
                //二、读文件或者写文件
                //参数1：表示要把哪个byte[]数组中的内容写入到文件
                //参数2：表示要从该byte[]数组的第几个下标开始写入,一般都是0
                //参数3：要写入的字节的个数。
                //fs.Write(buffer, 0, buffer.Length);
                //fs.Dispose();//自动调用close和flush方法

            }
        }
    }
}
